/**
 * 颜色相关CSS规则模块
 * @version 1.0.0
 */

import { utils } from '../../../utils/utils.js';
import { defaultColors } from '../../../utils/colors.js';

// 获取颜色值的辅助函数
function getColorValue(colorName) {
    // 直接查找颜色名称（包括 blue-50 这样的带连字符的）
    if (defaultColors[colorName]) {
        return defaultColors[colorName];
    }
    
    // 如果没找到，尝试处理老版本的嵌套结构（向后兼容）
    const colorWithShadeMatch = colorName.match(/^(\w+)-(\d+)$/);
    if (colorWithShadeMatch) {
        const [, baseName, shade] = colorWithShadeMatch;
        if (defaultColors[baseName] && typeof defaultColors[baseName] === 'object' && defaultColors[baseName][shade]) {
            return defaultColors[baseName][shade];
        }
    }
    
    return null;
}

// 处理颜色相关的CSS规则
export function processColorRules(className, options = {}) {
    const { platform = 'H5', h5Unit = 'rem', remBase = 16 } = options;
    
    // 渐变背景处理 - 支持 uni-app x 的 linear-gradient
    const gradientMatch = className.match(/^bg-gradient-to-([trbl]|tr|tl|br|bl)$/);
    if (gradientMatch) {
        const [, direction] = gradientMatch;
        const directionMap = {
            't': 'to top',
            'tr': 'to top right', 
            'r': 'to right',
            'br': 'to bottom right',
            'b': 'to bottom',
            'bl': 'to bottom left',
            'l': 'to left',
            'tl': 'to top left'
        };
        
        // 记录渐变方向，需要配合from-和to-类名使用
        return { '__gradient-direction': directionMap[direction] || 'to bottom' };
    }
    
    // 渐变起始颜色
    const gradientFromMatch = className.match(/^from-(.+)$/);
    if (gradientFromMatch) {
        const [, colorName] = gradientFromMatch;
        let colorValue = getColorValue(colorName);
        
        if (colorValue) {
            return { '__gradient-from': colorValue };
        }
    }
    
    // 渐变结束颜色
    const gradientToMatch = className.match(/^to-(.+)$/);
    if (gradientToMatch) {
        const [, colorName] = gradientToMatch;
        let colorValue = getColorValue(colorName);
        
        if (colorValue) {
            return { '__gradient-to': colorValue };
        }
    }
    
    // 渐变中间颜色
    const gradientViaMatch = className.match(/^via-(.+)$/);
    if (gradientViaMatch) {
        const [, colorName] = gradientViaMatch;
        let colorValue = getColorValue(colorName);
        
        if (colorValue) {
            return { '__gradient-via': colorValue };
        }
    }
    
    // 颜色
    const colorMatch = className.match(/^(text|bg|border)-(.+)$/);
    if (colorMatch) {
        const [, prop, value] = colorMatch;
        const propertyMap = {
            'text': 'color',
            'bg': 'background-color',
            'border': 'border-color'
        };
        
        const property = propertyMap[prop];
        
        if (defaultColors[value]) {
            const colorValue = defaultColors[value];
            return { 
                [property]: colorValue.includes(',') ? `rgb(${colorValue})` : colorValue 
            };
        }
        
        if (/^[0-9a-f]{3,8}$/i.test(value)) {
            const rgb = utils.toRgb(value);
            return { 
                [property]: rgb.includes(',') ? `rgb(${rgb})` : `#${value}` 
            };
        }
    }
    
    // background-clip - 根据 uni-app x 兼容性文档条件编译
    // Web: 4.0 支持, Android: 3.9 支持, iOS: x 不支持, HarmonyOS: x 不支持
    const bgClipMatch = className.match(/^bg-clip-(border|padding|content)$/);
    if (bgClipMatch) {
        const [, clipType] = bgClipMatch;
        
        // 根据平台和clip类型进行条件编译
        const isWebPlatform = platform === 'H5';
        const isAndroidPlatform = platform === 'APP-ANDROID';
        const isiOSPlatform = platform === 'APP-IOS';
        const isHarmonyPlatform = platform === 'APP-HARMONY';
        
        // iOS 和 HarmonyOS 完全不支持 background-clip，直接返回 null
        if (isiOSPlatform || isHarmonyPlatform) {
            console.warn(`[JZ UnoCSS] background-clip 在 ${platform} 平台不支持，跳过类名: ${className}`);
            return null;
        }
        
        // Android 仅支持 border-box
        if (isAndroidPlatform && clipType !== 'border') {
            console.warn(`[JZ UnoCSS] Android 平台仅支持 bg-clip-border，跳过类名: ${className}`);
            return null;
        }
        
        // Web 支持所有 clip 类型
        // Android 支持 border-box
        if (isWebPlatform || (isAndroidPlatform && clipType === 'border')) {
            const clipValueMap = {
                'border': 'border-box',
                'padding': 'padding-box',
                'content': 'content-box'
            };
            
            const clipValue = clipValueMap[clipType];
            if (clipValue) {
                return { 'background-clip': clipValue };
            }
        }
        
        // 其他平台或不支持的组合返回 null
        return null;
    }
    
    return null;
}

// 导出辅助函数
export { getColorValue }; 